﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using WC.BL.BCC;
using WC.BL.BE;
using System.Collections.Generic;

namespace WC.UI.WebApp
{
    public partial class AsigMsj : System.Web.UI.Page
    {
        #region metodos internos
        private void llenarListBox()
        {
            ClassListObjetBE objLst = null;

            if (Session["ClassListObjetBE"] == null)
            {
                objLst = UsuarioBC.usuariosXcriterioXmensaje(new UsuarioBE(txtUsuarioB.Text, "", txtCorreoB.Text,
                                                                                           txtNombreB.Text, ddlRamoFiltroB.SelectedValue, false, false, "", ""),
                                                                                           int.Parse(ddlMensajeB.SelectedValue));
            }
            else {
                objLst = (ClassListObjetBE)Session["ClassListObjetBE"];
            }

            this.lnkAsigATodos.Visible = false;
            this.lnkAsignar.Visible = false;
            this.lnkDesasignar.Visible = false;
            this.lnkDesTodo.Visible = false;
            // usuarios asignados
            if (objLst.Lista1 != null)
            {
                lsbAsignados.DataTextField = "Descripcion";
                lsbAsignados.DataValueField = "Codigo";
                lsbAsignados.DataSource = (List<GenericBE>)objLst.Lista1;
                lsbAsignados.DataBind();
                if (((List<GenericBE>)objLst.Lista1).Count > 0)
                {
                    this.lnkDesasignar.Visible = true;
                    this.lnkDesTodo.Visible = true;
                }
            }
            // usuarios no asignados
            if (objLst.Lista2 != null)
            {
                lsbNoAsignados.DataTextField = "Descripcion";
                lsbNoAsignados.DataValueField = "Codigo";
                lsbNoAsignados.DataSource = (List<GenericBE>)objLst.Lista2;
                lsbNoAsignados.DataBind();
                if (((List<GenericBE>)objLst.Lista2).Count > 0)
                {
                    this.lnkAsigATodos.Visible = true;
                    this.lnkAsignar.Visible = true;
                }
            }
            Session["ClassListObjetBE"] = objLst;
        }

        private void cargarCombos()
        {
            try
            {
                ddlRamoFiltroB.DataSource = SectorBC.list();
                ddlRamoFiltroB.DataBind();

                ddlMensajeB.DataTextField = "Descripcion";
                ddlMensajeB.DataValueField = "Codigo";
                ddlMensajeB.DataSource = MensajeBC.read();
                ddlMensajeB.DataBind();

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion
        protected void Page_Load(object sender, EventArgs e)
        {
            //Sirve para validar si el usuario es ADMIN
            if (!Page.IsPostBack)
            {
                try
                {
                    ((Main)Master).checkUser(true);
                    cargarCombos();
                    this.lnkAsigATodos.Visible = false;
                    this.lnkAsignar.Visible = false;
                    this.lnkDesasignar.Visible = false;
                    this.lnkDesTodo.Visible = false;
                }
                catch (Exception ex)
                {
                    Session["Mensaje"] = ex.Message;
                }
                finally
                {
                    ((Main)Master).muestraMensajes();
                }
            }
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            try
            {
                string rpta = string.Empty;
                List<GenericBE> lst = ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1);
                if (lst != null)
                    rpta = MensajeBC.asignarMensaje(lst, int.Parse(ddlMensajeB.SelectedValue));

                Session["Mensaje"] = rpta;
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Main)Master).muestraMensajes();
            }

        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {

        }

        protected void lnkAccion_Click(object sender, EventArgs e)
        {
            if (((LinkButton)sender).ID.Equals("lnkAsignar"))
            {
                for (int i = 0; i < lsbNoAsignados.Items.Count; i++)
                {
                    if (lsbNoAsignados.Items[i].Selected)
                    {
                        GenericBE itm = new GenericBE();
                        itm.Codigo = lsbNoAsignados.Items[i].Value;
                        itm.Descripcion= lsbNoAsignados.Items[i].Text;

                        if (((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1 == null)
                            ((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1 = new List<GenericBE>();

                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1).Add(itm);
                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2).RemoveAll(x => x.Codigo.Equals(itm.Codigo));
                    }
                }
            }else if (((LinkButton)sender).ID.Equals("lnkAsigATodos"))
            {
                for (int i = 0; i < lsbNoAsignados.Items.Count; i++)
                {
                   
                    {
                        GenericBE itm = new GenericBE();
                        itm.Codigo = lsbNoAsignados.Items[i].Value;
                        itm.Descripcion = lsbNoAsignados.Items[i].Text;

                        if (((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1 == null)
                            ((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1 = new List<GenericBE>();

                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1).Add(itm);
                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2).RemoveAll(x => x.Codigo.Equals(itm.Codigo));
                    }
                }
            }else if (((LinkButton)sender).ID.Equals("lnkDesasignar"))
            {
                for (int i = 0; i < lsbAsignados.Items.Count; i++)
                {
                    if (lsbAsignados.Items[i].Selected)
                    {
                        GenericBE itm = new GenericBE();
                        itm.Codigo = lsbAsignados.Items[i].Value;
                        itm.Descripcion = lsbAsignados.Items[i].Text;

                        if (((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2 == null)
                            ((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2 = new List<GenericBE>();

                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2).Add(itm);
                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1).RemoveAll(x => x.Codigo.Equals(itm.Codigo));
                    }
                }
            }
            else if (((LinkButton)sender).ID.Equals("lnkDesTodo"))
            {
                for (int i = 0; i < lsbAsignados.Items.Count; i++)
                {

                    {
                        GenericBE itm = new GenericBE();
                        itm.Codigo = lsbAsignados.Items[i].Value;
                        itm.Descripcion = lsbAsignados.Items[i].Text;

                        if (((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2 == null)
                            ((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2 = new List<GenericBE>();

                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista2).Add(itm);
                        ((List<GenericBE>)((ClassListObjetBE)Session["ClassListObjetBE"]).Lista1).RemoveAll(x => x.Codigo.Equals(itm.Codigo));
                    }
                }
            }
            llenarListBox();
        }

        protected void ibtnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            try
                {
                    Session.Remove("ClassListObjetBE");
                    llenarListBox();
                }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Main)Master).muestraMensajes();
            }
        }

    }
}
